home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Information / CSMP Digest / volume 3 / csmp-digest-v3-121 < prev    next >
Text File  |  1995-12-31  |  44KB  |  1,227 lines

  1. C.S.M.P. Digest             Sun, 12 Nov 95       Volume 3 : Issue 121
  2.  
  3. Today's Topics:
  4.  
  5.         32K code segments?
  6.         Apple Guide 2.0
  7.         Boot Blocks Again
  8.         Building an FSSpec
  9.         Drag And Drop for TextEdit
  10.         Getting file info from file reference number
  11.         PPC App + 68K module & callbacks (how?)
  12.         Q: Time Manager vs TickCount for Animation?
  13.         Q: system heap expansion at init time
  14.         [Q] To form this FSSpec...
  15.  
  16.  
  17.  
  18. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  19. (pottier@clipper.ens.fr).
  20.  
  21. The digest is a collection of article threads from the internet
  22. newsgroups comp.sys.mac.programmer.help, csmp.tools, csmp.misc and
  23. csmp.games. It is designed for people who read news semi-regularly and
  24. want an archive of the discussions.  If you don't know what a
  25. newsgroup is, you probably don't have access to it. Ask your systems
  26. administrator(s) for details. If you don't have access to news, you
  27. may still be able to post messages to the group by using a mail server
  28. like anon.penet.fi (mail help@anon.penet.fi for more information).
  29.  
  30. Each issue of the digest contains one or more sets of articles (called
  31. threads), with each set corresponding to a 'discussion' of a particular
  32. subject.  The articles are not edited; all articles included in this digest
  33. are in their original posted form (as received by our news server at
  34. nef.ens.fr).  Article threads are not added to the digest until the last
  35. article added to the thread is at least two weeks old (this is to ensure that
  36. the thread is dead before adding it to the digest).  Article threads that
  37. consist of only one message are generally not included in the digest.
  38.  
  39. The digest is officially distributed by two means, by email and ftp.
  40.  
  41. If you want to receive the digest by mail, send email to listserv@ens.fr
  42. with no subject and one of the following commands as body:
  43.     help                                Sends you a summary of commands
  44.     subscribe csmp-digest Your Name     Adds you to the mailing list
  45.     signoff csmp-digest                 Removes you from the list
  46. Once you have subscribed, you will automatically receive each new
  47. issue as it is created.
  48.  
  49. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  50. Questions related to the ftp site should be directed to
  51. scott.silver@dartmouth.edu.
  52.  
  53. -------------------------------------------------------
  54.  
  55. >From Johnny C Lam <jlbg+@andrew.cmu.edu>
  56. Subject: 32K code segments?
  57. Date: Sun, 22 Oct 1995 03:52:53 -0400
  58. Organization: Senior, Mathematics, Carnegie Mellon, Pittsburgh, PA
  59.  
  60. I have Symantec C++, and I was writing some threading routines on paper
  61. then trying to compile them.  I ran into the "code too large" error,
  62. which meant my code segment compiled to be over 32K, because I declared
  63. a rather large global array.
  64.  
  65. Is there some reason why segments have to be 32K and under?  I thought I
  66. read somewhere that everything compiled on a Mac has PC-relative code. 
  67. So is it because you can't access anything more than 32K off the PC
  68. register?  PC counter with displacement looks like xx(PC), where xx is a
  69. 16-bit number?
  70.  
  71. What about program counter with index?  Can I use that to access stuff
  72. that's more than 32K from the PC?  Meaning, can I reference xx(PC, D0.L)
  73. and get an address that's more than 32K from the PC?
  74.  
  75. Is that how UNIXs for the Mac do it?  I know UNIX code is compiled into
  76. a text, data, and blank static storage regions, so all of the variables
  77. is stored in the data and bss regions.  Do those UNIXs put the offset of
  78. the the data region from the base address into a register and use the PC
  79. with index addressing scheme to reference the variables, so that I can
  80. declare more than 32K of globals in my UNIX programs?
  81.  
  82. Sorry that I have so many questions.
  83.  
  84. One more question:  if I am working on designing an OS for the Mac, is
  85. there another place I should be posting my questions?  I am working on a
  86. UNIX-like OS and I have a lot of questions about operating systems in
  87. general.
  88.  
  89.     --Johnny
  90.  
  91.  
  92. +++++++++++++++++++++++++++
  93.  
  94. >From macjack@ids.net
  95. Date: Mon, 23 Oct 95 15:00:26 +500
  96. Organization: IDS World Network Internet Access Service, (800)IDS-1680
  97.  
  98. tulip@tiac.net (Ed Anson) writes:
  99. >> Is there some reason why segments have to be 32K and under?  I thought I
  100. >> read somewhere that everything compiled on a Mac has PC-relative code. 
  101. >> So is it because you can't access anything more than 32K off the PC
  102. >> register?  PC counter with displacement looks like xx(PC), where xx is a
  103. >> 16-bit number?
  104. >
  105. >Bingo! That is exactly why code segments are limited to 32K.
  106.  
  107. Wait a second here.. Can't one have segments larger than 32k by taking
  108. advantage of 32 bit addressing?
  109. --
  110. Louis Deaett
  111. <macjack@ids.net>
  112.  
  113. +++++++++++++++++++++++++++
  114.  
  115. >From tulip@tiac.net (Ed Anson)
  116. Date: Sun, 22 Oct 1995 16:51:50 -0400
  117. Organization: Tulip Software
  118.  
  119. In article <0kWTVJe00iVCM0j0dd@andrew.cmu.edu>, Johnny C Lam
  120. <jlbg+@andrew.cmu.edu> wrote:
  121.  
  122. > I have Symantec C++, and I was writing some threading routines on paper
  123. > then trying to compile them.  I ran into the "code too large" error,
  124. > which meant my code segment compiled to be over 32K, because I declared
  125. > a rather large global array.
  126.  
  127. Global arrays do not affect code segment size. They affect the global
  128. size, which is also nominally restricted to 32K.
  129.  
  130. BTW: Large global arrays are typically not a good idea. It is better to
  131. allocate large arrays from the heap, using NewPtr(). If you really want it
  132. to be global (or a static member in C++) you can declare it thus:
  133.  
  134. long* myArray = NewPtr(nElements*sizeof(long));
  135.  
  136. It is then globally available, and can be used syntactically just like an array.
  137.  
  138. > Is there some reason why segments have to be 32K and under?  I thought I
  139. > read somewhere that everything compiled on a Mac has PC-relative code. 
  140. > So is it because you can't access anything more than 32K off the PC
  141. > register?  PC counter with displacement looks like xx(PC), where xx is a
  142. > 16-bit number?
  143.  
  144. Bingo! That is exactly why code segments are limited to 32K.
  145.  
  146. However, the system supports Far Model for both code and data. Far model
  147. code uses absolute addressing, so it is less efficient. But it permits
  148. essentially unlimited code size. Presumably, your compiler/linker provides
  149. that option, since most current development systems do.
  150.  
  151. - --------------------
  152. Ed Anson            MediaTree: multimedia outline editor & catalog
  153. Tulip Software
  154. Andover, MA 01810   For details, check out my WWW page:
  155. U.S.A.              <http://www.tiac.net/users/tulip/home.html>
  156.  
  157. +++++++++++++++++++++++++++
  158.  
  159. >From eric.kidd@dartmouth.edu (Eric M. Kidd)
  160. Date: 25 Oct 1995 14:49:27 GMT
  161. Organization: Dartmouth College
  162.  
  163. In article <0kWTVJe00iVCM0j0dd@andrew.cmu.edu>, Johnny C Lam
  164. <jlbg+@andrew.cmu.edu> wrote:
  165.  
  166. > I have Symantec C++, and I was writing some threading routines on paper
  167. > then trying to compile them.  I ran into the "code too large" error,
  168. > which meant my code segment compiled to be over 32K, because I declared
  169. > a rather large global array.
  170.  
  171. Depending on you version of Symantec C++, you need to turn on "far data"
  172. (or "far code", depending on your problem), as best I remember. It has
  173. been quite a while. =)
  174.  
  175. Metrowerks C/C++ does a good job of handling lots of data--I've got an app
  176. with about 80k of global data (PowerPlant, ANSI C, iostreams, debug junk)
  177. and it works just fine.
  178.  
  179. Just be sure not to allocate enormous arrays on the stack. You can easily
  180. cause overflow under the MacOS.
  181.  
  182. Cheers,
  183. Eric
  184.  
  185. ........................................................................
  186. Eric Kidd (eric.kidd@dartmouth.edu)      http://coos.dartmouth.edu/~emk/
  187. "Computers are useless.  They can only give you answers." -Pablo Picasso
  188.  
  189. +++++++++++++++++++++++++++
  190.  
  191. >From rac@intrigue.com (Robert Coie)
  192. Date: Wed, 25 Oct 1995 18:23:49 -0800
  193. Organization: Intrigue Corporation
  194.  
  195. In article <tulip-2210951651510001@tulip.tiac.net>, tulip@tiac.net (Ed
  196. Anson) wrote:
  197.  
  198. : In article <0kWTVJe00iVCM0j0dd@andrew.cmu.edu>, Johnny C Lam
  199. : <jlbg+@andrew.cmu.edu> wrote:
  200. : > Is there some reason why segments have to be 32K and under?  I thought I
  201. : > read somewhere that everything compiled on a Mac has PC-relative code. 
  202. : > So is it because you can't access anything more than 32K off the PC
  203. : > register?  PC counter with displacement looks like xx(PC), where xx is a
  204. : > 16-bit number?
  205. : Bingo! That is exactly why code segments are limited to 32K.
  206.  
  207. I was under the impression that the 32K limit was imposed by the original
  208. Resource Manager.
  209.  
  210. Robert Coie                              rac@intrigue.com
  211. Implementor, Intrigue Corporation     AppleLink: INTRIGUE
  212.  
  213. +++++++++++++++++++++++++++
  214.  
  215. >From siegel@tiac.net (Rich Siegel)
  216. Date: Fri, 27 Oct 1995 00:08:29 -0400
  217. Organization: Bare Bones Software, Inc.
  218.  
  219. In article <rac-2510951823490001@intrigue.intrigue.com>, rac@intrigue.com
  220. (Robert Coie) wrote:
  221.  
  222. > In article <tulip-2210951651510001@tulip.tiac.net>, tulip@tiac.net (Ed
  223. > Anson) wrote:
  224. > : In article <0kWTVJe00iVCM0j0dd@andrew.cmu.edu>, Johnny C Lam
  225. > : <jlbg+@andrew.cmu.edu> wrote:
  226. > : > Is there some reason why segments have to be 32K and under?  I thought I
  227. > : > read somewhere that everything compiled on a Mac has PC-relative code. 
  228. > : > So is it because you can't access anything more than 32K off the PC
  229. > : > register?  PC counter with displacement looks like xx(PC), where xx is a
  230. > : > 16-bit number?
  231. > : 
  232. > : Bingo! That is exactly why code segments are limited to 32K.
  233. > I was under the impression that the 32K limit was imposed by the original
  234. > Resource Manager.
  235.  
  236. Historically, there are several 32K-bounded limits:
  237.  
  238. 1) The old Resource Manager had a bug in which resources whose sizes fell
  239. in between even multiples of 32K would cause problems (0-32K was fine,
  240. 32-64K was not, 64-96K was fine, and so on). This bug has long since been
  241. fixed.
  242.  
  243. 2) The original 68000 (used in the original Mac) limited
  244. address-register-relative displacements to 16 bits. Since the "classic"
  245. Mac runtime model placed global data in negative displacements relative to
  246. A5, and stored the jump table (used for cross-segment calls) in positive
  247. displacements relative to A5, this meant that the size of the global data
  248. space was limited to 32K, and the size of the jump table was limited to
  249. 32K.
  250.  
  251. 3) The aforementioned jump table for cross-segment calls uses a signed
  252. 16-bit value as the segment-relative offset. This means that no entry
  253. point called through the jump table can be more than 32K from the start of
  254. the code segment.
  255. (Some linkers may provide alternatives to this as part of their 'far code'
  256. linkage model, but I haven't paid close attention here.)
  257.  
  258. Most of these limitations can be worked around by throwing the appropriate
  259. switches in your compiler and/or linker, though at some penalty in code
  260. size (and an extra bit of overhead whenever a segment load occurs). Of
  261. course, with the advent of the Code Fragment Manager (first seen on the
  262. Power Macs, and shortly available for 68K machines), these 32K limits are
  263. largely relegated to the dustbin of history...
  264.  
  265. R.
  266.  
  267. ---------------------------
  268.  
  269. >From Alex Rosen <alex@procd.com>
  270. Subject: Apple Guide 2.0
  271. Date: 23 Oct 1995 18:18:30 GMT
  272. Organization: Pro CD, Inc.
  273.  
  274. Apple Guide 2.0 is out, available at
  275. ftp://ftp.info.apple.com/Apple.Support.Area/Developer_Services/System_S
  276. ftware_Extensions/Apple_Guide_Authoring_Kit/
  277.  
  278. I just installed this under a brand-new 7.1.2 install on a 7100/66, and
  279. after just a few minutes of playing it seems a lot different than under
  280. 7.5. Does anyone else have similar problems? Will there be a list of
  281. incompatibilities or lack of functionality on pre-7.5 systems?
  282.  
  283. - If I put the SimpleText Guide in the Extensions folder, it does not
  284. appear in the Guide menu when SimpleText is open. It must be in the same
  285. folder as SimpleText to show up.
  286.  
  287. - The first help item I tried in SimpleText, How do I open a document,
  288. doesn't work. It doesn't know that the GetFile dialog is open, and keeps
  289. telling me to open it.
  290.  
  291. --Alex
  292.  
  293. ---------------------------
  294.  
  295. >From grinch@ns.moran.com (The Grinch)
  296. Subject: Boot Blocks Again
  297. Date: Wed, 25 Oct 1995 18:22:41 -0400
  298. Organization: Vortex Software
  299.  
  300. Where can I get the SCSI specs again? I lost the address. (Sorry.) Please 
  301. e-mail your replies. Thanx a million.
  302.  
  303. ÑThe Grinch
  304.  
  305. +++++++++++++++++++++++++++
  306.  
  307. >From st955901@pilot.stu.cowan.edu.au (Philip Cummins)
  308. Date: Fri, 27 Oct 1995 12:02:58 +0800
  309. Organization: Edith Cowan University
  310.  
  311. In article <grinch-2510951822410001@nw19.moran.com>, grinch@ns.moran.com
  312. (The Grinch) wrote:
  313.  
  314. Hello,
  315.  
  316. ftp://ftp.symbios.com/pub/standards/io/ <--- Under various folders. Also
  317. ATA = IDE, BTW. 
  318.  
  319. Philip
  320.  
  321. -- 
  322. Please exert your creativity to convince yourself there's a signature here.
  323.  
  324. ---------------------------
  325.  
  326. >From noof@aol.com (Noof)
  327. Subject: Building an FSSpec
  328. Date: 22 Oct 1995 16:25:36 -0400
  329. Organization: America Online, Inc. (1-800-827-6364)
  330.  
  331. What is the easiest way to build an FSSpec for a file that my application
  332. is going to read when I know that the file will always be in the same
  333. folder as the app that's going to read it and I know the name of the file?
  334.  
  335. Some how I need to find out the parent directory ID.  How do I do that?
  336.  
  337. Thanks,
  338.  
  339. David Knuth
  340.  
  341. +++++++++++++++++++++++++++
  342.  
  343. >From Francois-Regis.Degott@imag.fr (F. Degott)
  344. Date: 24 Oct 1995 16:26:23 GMT
  345. Organization: LMC-IMAG Grenoble France
  346.  
  347. In article <46e9c0$m0f@newsbf02.news.aol.com>, noof@aol.com (Noof) wrote:
  348.  
  349. >What is the easiest way to build an FSSpec for a file that my application
  350. >is going to read when I know that the file will always be in the same
  351. >folder as the app that's going to read it and I know the name of the file?
  352. >
  353. >Some how I need to find out the parent directory ID.  How do I do that?
  354.  
  355. Hi David,
  356. see the Process Manager chapter, in IM vol.6,
  357. specially:
  358. - the GetCurrentProcess() proc.,
  359. - the GetProcessInformation() proc.,
  360. - the ProcessAppSpec field of the ProcessInfoRec structure.
  361.  
  362. OSErr GetCurrentProcessFSSpec (FSSpec *fspec)
  363. {
  364.       OSErr err;
  365.       ProcessSerialNumber psn;
  366.       ProcessInfoRec pinfo;
  367.  
  368.       err = GetCurrentProcess(&psn);
  369.       if (err == NoErr) 
  370.       {
  371.             pinfo.processInfoLength = sizeof(ProcessInfoRec);
  372.             pinfo.processName = NULL;
  373.             pinfo.processAppSpec = fspec;
  374.             err = GetProcessInfo(psn,&pinfo);
  375.       }
  376.       return(err);
  377. }
  378.  
  379. in main:
  380.  
  381. FSSpec AppFSSpec;
  382. if (GetCurrentProcessFSSpec(&AppFSSpec) == NoErr)
  383. {
  384.       /*do stuff with AppFSSpec*/
  385. }
  386.  
  387. Hope this helps.
  388. Fr
  389. ___________________________________________________________________________
  390. FR Degott (Francois-Regis.Degott@imag.fr)
  391. LogiMath, Lab. LMC-IMAG - Grenoble - France
  392.  
  393. +++++++++++++++++++++++++++
  394.  
  395. >From sproul@eos.ap.org (Mark Sproul)
  396. Date: Thu, 26 Oct 1995 11:09:09 -0400
  397. Organization: Associated Press R&D
  398.  
  399. In article <Francois-Regis.Degott-2410951727150001@harpie.imag.fr>,
  400. Francois-Regis.Degott@imag.fr (F. Degott) wrote:
  401.  
  402. > In article <46e9c0$m0f@newsbf02.news.aol.com>, noof@aol.com (Noof) wrote:
  403. > >What is the easiest way to build an FSSpec for a file that my application
  404. > >is going to read when I know that the file will always be in the same
  405. > >folder as the app that's going to read it and I know the name of the file?
  406. > >
  407. > >Some how I need to find out the parent directory ID.  How do I do that?
  408.  
  409.  
  410. use 0 for the vRefNum and 0 for the parID in MakeFsSpec,  thats all there
  411. is to it.
  412.  
  413. Mark
  414.  
  415.  
  416. ---------------------------
  417.  
  418. >From demos@home.amug.org (Demos)
  419. Subject: Drag And Drop for TextEdit
  420. Date: Mon, 23 Oct 1995 02:59:59 +0100
  421. Organization: AMUG
  422.  
  423. Hi everyone!
  424. I am writing a better wrap for TextEdit in PowerPlant : LNewTextEdit.
  425. Anyone knows any examples that handle plain Drag and Drop just like in
  426. SimpleText with TextEdit? I think, I saw a sample code on the develop
  427. CD once. But I failed to find it now.
  428.  
  429. Let me know if you have something.
  430. thanks!
  431.  
  432. Demos
  433.  
  434. ___________________________________________________________________
  435. Demos <demos@home.amug.org> | IRC: #macdev | http://amug.org/~demos
  436.  
  437. +++++++++++++++++++++++++++
  438.  
  439. >From j-norstad@nwu.edu (John Norstad)
  440. Date: Mon, 23 Oct 1995 19:20:23 -0500
  441. Organization: Northwestern University
  442.  
  443. In article <demos-2310950259590001@chem-25.chem.utah.edu>,
  444. demos@home.amug.org (Demos) wrote:
  445.  
  446. > Hi everyone!
  447. > I am writing a better wrap for TextEdit in PowerPlant : LNewTextEdit.
  448. > Anyone knows any examples that handle plain Drag and Drop just like in
  449. > SimpleText with TextEdit? I think, I saw a sample code on the develop
  450. > CD once. But I failed to find it now.
  451. > Let me know if you have something.
  452.  
  453. I implemented drag and drop with TextEdit in my NewsWatcher program.
  454. Source code is available at:
  455.  
  456.     <ftp://ftp.acns.nwu.edu/pub/newswatcher/>
  457.  
  458. In particular, see some of the resuable code in the teutil.c and
  459. dragutil.c modules.
  460.  
  461. One thing I learned is that text drag and drop really requires that you
  462. also implement intelligent cut and paste. E.g., if you drag a word from
  463. one place in your text to another place, you really need to go through all
  464. that delete extra space character and insert extra space character
  465. nonsense. I did that in NewsWatcher too. It was delicate, and I had to go
  466. back and fix my code several times before I got it right, but I think it's
  467. working pretty well now.
  468.  
  469. -- 
  470. John Norstad
  471. Academic Technologies
  472. Northwestern University
  473. j-norstad@nwu.edu
  474. <http://charlotte.acns.nwu.edu/jln/jln.html>
  475.  
  476. ---------------------------
  477.  
  478. >From nordic@inetnebr.com (Dave)
  479. Subject: Getting file info from file reference number
  480. Date: 17 Oct 1995 22:05:06 GMT
  481. Organization: Nordic Software
  482.  
  483. Hi All,  
  484.    Is there a way to get file information ( specifically a file name )
  485. from a file access path reference number, such as the number returned from
  486. OpenResFile?
  487.  
  488.    I am working with someone elses code.  At some point a resource file is
  489. getting opened.  For the life of me I cannot find the file that is open. 
  490. I am getting a bogus dialog and I cannot find what res file it is in.  I
  491. have the file reference number however.  
  492.  
  493.    There probably is a simple answer that I am overlooking.  I can fix the
  494. bug but now my curiosity is peaked....
  495.  
  496. Thanks
  497. Dave
  498.  
  499. +++++++++++++++++++++++++++
  500.  
  501. >From phixus@deltanet.com (Chris De Salvo)
  502. Date: Tue, 17 Oct 1995 21:17:54 -0700
  503. Organization: MacPlay
  504.  
  505. In article <nordic-1710951704310001@in76.inetnebr.com>,
  506. nordic@inetnebr.com (Dave) wrote:
  507.  
  508. > Hi All,  
  509. >    Is there a way to get file information ( specifically a file name )
  510. > from a file access path reference number, such as the number returned from
  511. > OpenResFile?
  512.  
  513. There sure is.  There's a wonderful call known as PBGetFCBInfo().  Pass it
  514. a fileRef and it gives you back all of the info from the file control
  515. block associated with that open file.
  516.  
  517. Here's an example that should get you the name of the file:
  518.  
  519. FCBPBRec    fileRec;
  520. OSErr       theErr;
  521. Str255      fileName;
  522.  
  523.    //•   Get information on this open file
  524.    fileRec.ioCompletion = nil;   //•  Not asynch
  525.    fileRec.ioFCBIndx = 0;        //•  Check on all open files
  526.    fileRec.ioVRefNum = 0;        //•  On all volumes
  527.    fileRec.ioRefNum = fileRef;
  528.    fileRec.ioNamePtr = fileName; //•  Name get's filled in here
  529.  
  530.    theErr = PBGetFCBInfo(&fileRec, FALSE);
  531.  
  532. You'd never believe how happy I was the first time that I discovered this
  533. call.  It solved a VERY nasty problem for me.  :)
  534.  
  535. L8R,
  536. Chris
  537.  
  538. -- 
  539. +-----------------------------------------------------------------+
  540. | phixus@deltanet.com         |   Macintosh:  Changing the world, |
  541. | Chris De Salvo              |        one person at a time!      |
  542. | Professional Mac Geek       |    -----------------------------  |
  543. | for MacPlay, Inc.           |      (I wish they'd hurry up!)    |
  544. +-----------------------------------------------------------------+
  545.  
  546. Any opinions expressed, or implied, are my own!  They should not be
  547. considered representative of the opinions or policies of my employer,
  548. MacPlay, a division of Interplay Productions, Inc.
  549.  
  550. +++++++++++++++++++++++++++
  551.  
  552. >From grinch@ns.moran.com (The Grinch)
  553. Date: Thu, 19 Oct 1995 18:45:19 -0400
  554. Organization: Vortex Software
  555.  
  556. In article <nordic-1710951704310001@in76.inetnebr.com>, 
  557. nordic@inetnebr.com (Dave) wrote:
  558.  
  559. > Hi All,  
  560. >    Is there a way to get file information ( specifically a file name )
  561. > from a file access path reference number?
  562.  
  563. I think so. (Untested.) Just step right on through the FCB queue, in 
  564. through the fcbBTCBPtr fields, until you find your number in the btcRefNum 
  565. field of the BTCB. Good luck; you'll probably need it!
  566.  
  567. ÑThe Grinch  B-)
  568.  
  569. +++++++++++++++++++++++++++
  570.  
  571. >From jeremyr@dcs.qmw.ac.uk (Jeremy Roussak)
  572. Date: 21 Oct 1995 06:13:51 GMT
  573. Organization: Queen Mary & Westfield College, London, England
  574.  
  575. In article <grinch-1910951845190001@nw35.moran.com>
  576. grinch@ns.moran.com (The Grinch) writes:
  577.  
  578. > In article <nordic-1710951704310001@in76.inetnebr.com>, 
  579. > nordic@inetnebr.com (Dave) wrote:
  580. > > Hi All,  
  581. > >    Is there a way to get file information ( specifically a file name )
  582. > > from a file access path reference number?
  583. > I think so. (Untested.) Just step right on through the FCB queue, in 
  584. > through the fcbBTCBPtr fields, until you find your number in the btcRefNum 
  585. > field of the BTCB. Good luck; you'll probably need it!
  586.  
  587. On the other hand, if you use PBGetFCBInfo, you'll get the information
  588. and you'll need a lot less luck.
  589.  
  590. Jeremy
  591.  
  592. +++++++++++++++++++++++++++
  593.  
  594. >From gotow@stclairsw.com (Jon Gotow)
  595. Date: Mon, 23 Oct 1995 23:50:34 -0500
  596. Organization: St. Clair Software
  597.  
  598. In article <grinch-1910951845190001@nw35.moran.com>, grinch@ns.moran.com
  599. (The Grinch) wrote:
  600.  
  601. > In article <nordic-1710951704310001@in76.inetnebr.com>, 
  602. > nordic@inetnebr.com (Dave) wrote:
  603. > > Hi All,  
  604. > >    Is there a way to get file information ( specifically a file name )
  605. > > from a file access path reference number?
  606. > I think so. (Untested.) Just step right on through the FCB queue, in 
  607. > through the fcbBTCBPtr fields, until you find your number in the btcRefNum 
  608. > field of the BTCB. Good luck; you'll probably need it!
  609.  
  610. Just use PBGetFCBInfo() - Inside Mac IV, page 179, for those that still
  611. have the old paper copies.
  612.  
  613.  - Jon
  614. ________________________________________________________________________
  615.         Jon Gotow                     gotow@stclairsw.com
  616.    St. Clair Software           http://www.stclairsw.com/stclairsw/
  617.     Fax (412)835-4402            ftp://ftp.stclairsw.com/stclairsw/
  618.  
  619. ---------------------------
  620.  
  621. >From starlabs@aol.com (StarLabs)
  622. Subject: PPC App + 68K module & callbacks (how?)
  623. Date: 23 Oct 1995 05:35:06 -0400
  624. Organization: America Online, Inc. (1-800-827-6364)
  625.  
  626. Sorry if this seems like a trivial question, but since I'm new to this UPP
  627. business...
  628.  
  629. I'm planning on writing a fat application that supports plug-in code
  630. modules.
  631. Because of my inherent laziness I would prefer the code modules to be 68K
  632. only.
  633.  
  634. The problem is with this scenario: assuming I'm running on a PowerMac and
  635. since the PPC version of my application is running, what happens when it
  636. loads and invokes the 68K module and the module makes a callback to the
  637. fat application? In other words, how do I implement this?!? Currently I
  638. have
  639. given the code module a ProcPtr only for callbacks (since it's 68K only).
  640. I have a feeling this won't work [I can't test it on a PowerMac yet].
  641.  
  642. I know the fat application will do this right thing by calling
  643. CallUniversalProc to invoke the 68K code module (and thereby telling the
  644. Mixed Mode manager of the inherent switch in architectures) but how do I
  645. implement callbacks for the 68K code module? Since it's 68K it only knows
  646. ProcPtrs and can't tell the Mixed Mode manager of the switch from 68K to
  647. PPC. Ack! I'm confused!
  648.  
  649. I have a bad feeling I'll have to resort to writing safe fat code
  650. modules :-(
  651. --Hiep
  652.  
  653. +++++++++++++++++++++++++++
  654.  
  655. >From "Andrew C. Plotkin" <erkyrath+@CMU.EDU>
  656. Date: Mon, 23 Oct 1995 11:47:28 -0400
  657. Organization: Carnegie Mellon, Pittsburgh, PA
  658.  
  659. starlabs@aol.com (StarLabs) writes:
  660. > I'm planning on writing a fat application that supports plug-in code
  661. > modules.
  662. > Because of my inherent laziness I would prefer the code modules to be 68K
  663. > only.
  664. > The problem is with this scenario: assuming I'm running on a PowerMac and
  665. > since the PPC version of my application is running, what happens when it
  666. > loads and invokes the 68K module and the module makes a callback to the
  667. > fat application? In other words, how do I implement this?!? Currently I
  668. > have
  669. > given the code module a ProcPtr only for callbacks (since it's 68K only).
  670. > I have a feeling this won't work [I can't test it on a PowerMac yet].
  671.  
  672. Sneakily, it will work. You pass in a UPP and tell the 68K code it's a
  673. function pointer. The 68K code calls it (naive fool that it is.)
  674. The 68K emulator begins actually executing the UPP block... which is
  675. legal, because a UPP block always begins with the A-trap which leads
  676. into the Mixed-Mode Manager. 
  677.  
  678. Then the magic takes over. It's all pretty clever, really.
  679.  
  680. --Z
  681.  
  682. "And Aholibamah bare Jeush, and Jaalam, and Korah: these were the borogoves..."
  683.  
  684. ---------------------------
  685.  
  686. >From erichsen@pacificnet.net (Erichsen)
  687. Subject: Q: Time Manager vs TickCount for Animation?
  688. Date: Wed, 04 Oct 1995 13:19:34 -0700
  689. Organization: Disorganized
  690.  
  691. Why do people use the Time Manager instead of TickCount() when doing
  692. animation? It seems like a lot of overhead is involved when using the Time
  693. Manager especially so if the Time Manager isn't native (ie. mode switches)
  694. so what's the real benefit of using it over just checking TickCount() for
  695. when to draw the animation?
  696.  
  697. +++++++++++++++++++++++++++
  698.  
  699. >From phixus@deltanet.com (Chris De Salvo)
  700. Date: Thu, 05 Oct 1995 00:45:35 -0700
  701. Organization: MacPlay
  702.  
  703. In article <erichsen-0410951319340001@pm1-3.pacificnet.net>,
  704. erichsen@pacificnet.net (Erichsen) wrote:
  705.  
  706. > Why do people use the Time Manager instead of TickCount() when doing
  707. > animation? It seems like a lot of overhead is involved when using the Time
  708. > Manager especially so if the Time Manager isn't native (ie. mode switches)
  709. > so what's the real benefit of using it over just checking TickCount() for
  710. > when to draw the animation?
  711.  
  712. Well, finer resolution is one thing.  TickCount() only has 60th of a
  713. second resolution.  If you need something higher than that, then you're
  714. hosed.
  715.  
  716. The main thing is ease of use.  If you use TickCount() you have to
  717. manually check the value to see when it's time to do the next frame.  If
  718. you use the Time Manager then your timer task can just set a global
  719. variable saying that it's time to do the next frame.  That way, no matter
  720. where you are in your code the flag gets set and you always have
  721. up-to-date info on the state of things.
  722.  
  723. If you needed to check the time in more than one place then you'd have to
  724. set a global with the future time, and check it all over the place.
  725.  
  726. Plus, let's say you wanted something like, "Ok, the player stepped on a
  727. boobytrap.  In 7.5 seconds, spring the trap".  Checking things like that
  728. with TickCount() is a pain in the butt.  Especially when the Time Manager
  729. does it accurately, and conveniently, with a callback.
  730.  
  731. When you have a recurring task, nothing beats the Time Manager.  eg.  When
  732. I did SimCity CD-ROM, I had a Time Manager task that fired every 10
  733. minutes and triggered an event.  It's extremely handy.
  734.  
  735. L8R
  736. Chris
  737.  
  738. -- 
  739. +-----------------------------------------------------------------+
  740. | phixus@deltanet.com         |   Macintosh:  Changing the world, |
  741. | Chris De Salvo              |        one person at a time!      |
  742. | Professional Mac Geek       |    -----------------------------  |
  743. | for MacPlay, Inc.           |      (I wish they'd hurry up!)    |
  744. +-----------------------------------------------------------------+
  745.  
  746. Any opinions expressed, or implied, are my own!  They should not be
  747. considered representative of the opinions or policies of my employer,
  748. MacPlay, a division of Interplay Productions, Inc.
  749.  
  750. +++++++++++++++++++++++++++
  751.  
  752. >From jbruni@primenet.com (Joseph Bruni)
  753. Date: Wed, 04 Oct 1995 23:03:44 -0700
  754. Organization: Primenet
  755.  
  756. In article <erichsen-0410951319340001@pm1-3.pacificnet.net>,
  757. erichsen@pacificnet.net (Erichsen) wrote:
  758.  
  759. > Why do people use the Time Manager instead of TickCount() when doing
  760. > animation? It seems like a lot of overhead is involved when using the Time
  761. > Manager especially so if the Time Manager isn't native (ie. mode switches)
  762. > so what's the real benefit of using it over just checking TickCount() for
  763. > when to draw the animation?
  764.  
  765.  
  766.  
  767. TickCount() is updated 60 times a second by a VBL task. But it is very
  768. unreliable (it sometimes misses a beat).
  769.  
  770. If your animation needs to be synchronized to video, you need to use
  771. something tied to that video. SlotVBL tasks replaced ordinary VBL tasks,
  772. but I think Time Manager tasks replaced those.
  773.  
  774. +++++++++++++++++++++++++++
  775.  
  776. >From kluev@macsimum.gamma.ru (Kluev)
  777. Date: Thu, 5 Oct 95 21:40:51 +0300
  778. Organization: (none)
  779.  
  780. In article <jbruni-0410952303440001@ip237.phx.primenet.com>,
  781. jbruni@primenet.com (Joseph Bruni) wrote:
  782.  
  783. >In article <erichsen-0410951319340001@pm1-3.pacificnet.net>,
  784. >erichsen@pacificnet.net (Erichsen) wrote:
  785. >
  786. >> Why do people use the Time Manager instead of TickCount() when doing
  787. >> animation? It seems like a lot of overhead is involved when using
  788. the Time
  789. >> Manager especially so if the Time Manager isn't native (ie. mode
  790. switches)
  791. >> so what's the real benefit of using it over just checking
  792. TickCount() for
  793. >> when to draw the animation?
  794. >
  795. >TickCount() is updated 60 times a second by a VBL task. But it is very
  796. >unreliable (it sometimes misses a beat).
  797.  
  798. AFAICT, TickCount is accurate (i.e. it is updated every tick). What is
  799. not accurate is firing of user VBL tasks. The only source of inaccuracy
  800. of Ticks is disabling interrupts for a long time, and the fact that VBL
  801. mechanizm gets executed after interrupt occurred (deferred time). But
  802. in any case you'll not get your global flag updated until interrupt
  803. cycle completed.
  804.  
  805. >If your animation needs to be synchronized to video, you need to use
  806. >something tied to that video. SlotVBL tasks replaced ordinary VBL
  807. tasks,
  808. >but I think Time Manager tasks replaced those.
  809.  
  810. The only way to sync. with video nowadays is SlotVBL task.
  811.  
  812. - --------------------------------------------------------------
  813. Michael Kluev                            kluev@macsimum.gamma.ru
  814. Macintosh Programmer                           Physics Grad, MSU
  815. MACsimum Ltd.                                     Moscow, Russia
  816. - --------------------------------------------------------------
  817.  
  818. +++++++++++++++++++++++++++
  819.  
  820. >From scu60@earthlink.net (David Padilla)
  821. Date: Tue, 10 Oct 1995 00:59:11 -0800
  822. Organization: Earthlink Network, Inc.
  823.  
  824. In article <phixus-0510950045350001@ana0012.deltanet.com>,
  825. phixus@deltanet.com (Chris De Salvo) wrote:
  826.  
  827. > In article <erichsen-0410951319340001@pm1-3.pacificnet.net>,
  828. > erichsen@pacificnet.net (Erichsen) wrote:
  829. > > Why do people use the Time Manager instead of TickCount() when doing
  830. > > animation? It seems like a lot of overhead is involved when using the Time
  831. > > Manager especially so if the Time Manager isn't native (ie. mode switches)
  832. > > so what's the real benefit of using it over just checking TickCount() for
  833. > > when to draw the animation?
  834. > Well, finer resolution is one thing.  TickCount() only has 60th of a
  835. > second resolution.  If you need something higher than that, then you're
  836. > hosed.
  837. > The main thing is ease of use.  If you use TickCount() you have to
  838. > manually check the value to see when it's time to do the next frame.  If
  839. > you use the Time Manager then your timer task can just set a global
  840. > variable saying that it's time to do the next frame.  That way, no matter
  841. > where you are in your code the flag gets set and you always have
  842. > up-to-date info on the state of things.
  843.  
  844.  
  845. How do you use the Time Manager and a global to control an animation
  846. sequence? I have never seen this done. Could someone provide a simple
  847. example or direct me to a to one? I am new to this animaton stuff, but am
  848. becomming ok (if I do say so myself), so the more basic the example the
  849. better. Currently, I have been using a simple while and tickcount method
  850. to control things. 
  851.  
  852. All advice appreciated.
  853.  
  854. David
  855.  
  856. +++++++++++++++++++++++++++
  857.  
  858. >From erichsen@pacificnet.net (Erichsen)
  859. Date: Wed, 11 Oct 1995 18:52:35 -0700
  860. Organization: Disorganized
  861.  
  862. In article <scu60-1010950059120001@204.250.136.234>, scu60@earthlink.net
  863. (David Padilla) wrote:
  864.  
  865. >How do you use the Time Manager and a global to control an animation
  866. >sequence? I have never seen this done. Could someone provide a simple
  867. >example or direct me to a to one? I am new to this animaton stuff, but am
  868. >becomming ok (if I do say so myself), so the more basic the example the
  869. >better. Currently, I have been using a simple while and tickcount method
  870. >to control things. 
  871.  
  872. You just setup a Time Manager Task to fire off at a certain interval and
  873. from the task's completion routine, you set the global.
  874.  
  875. If you want to see actual code, check out SpriteWorld, it does this and
  876. it's pretty straightforward.
  877.  
  878. +++++++++++++++++++++++++++
  879.  
  880. >From erichsen@pacificnet.net (Erichsen)
  881. Date: Sun, 15 Oct 1995 14:10:53 -0700
  882. Organization: Disorganized
  883.  
  884. In article <660996062.16983248@gammabbs.uucp.netcom.com>,
  885. David_M._Padilla@gammabbs.uucp.netcom.com wrote:
  886.  
  887. >Could you point me to the location and excat file name of SpriteWorld, I
  888. >checked AOL and there were a number of Sprite type file archives. Thanks much
  889. >for the direction.
  890.  
  891. I'm not on AOL but, it's on Info-Mac
  892. <ftp://sumex-aim.stanford.edu/info-mac/> in the dev/src area.
  893.  
  894. +++++++++++++++++++++++++++
  895.  
  896. >From David_M._Padilla@gammabbs.uucp.netcom.com (David M. Padilla)
  897. Date: 14 Oct 1995 05:14:06 GMT
  898. Organization: Gamma Quadrant BBS
  899.  
  900. >>> You just setup a Time Manager Task to fire off at a certain
  901. >>> interval and from the task's completion routine, you set the
  902. >>> global. 
  903. >>> 
  904. >>> If you want to see actual code, check out SpriteWorld, it does this
  905. >>> and it's pretty straightforward.
  906.  
  907. Could you point me to the location and excat file name of SpriteWorld, I
  908. checked AOL and there were a number of Sprite type file archives. Thanks much
  909. for the direction.
  910.  
  911. Dave
  912. - ---------------------------------
  913. The Gamma Quadrant - FirstClass BBS
  914. Huntington Beach, CA (714) 840-7497
  915. - ---------------------------------
  916.  
  917. +++++++++++++++++++++++++++
  918.  
  919. >From peter@stairways.com.au (Peter N Lewis)
  920. Date: Fri, 27 Oct 1995 13:42:26 +0800
  921. Organization: Stairways Software
  922.  
  923. In article <erichsen-0410951319340001@pm1-3.pacificnet.net>,
  924. erichsen@pacificnet.net (Erichsen) wrote:
  925.  
  926. >Why do people use the Time Manager instead of TickCount() when doing
  927. >animation? It seems like a lot of overhead is involved when using the Time
  928. >Manager especially so if the Time Manager isn't native (ie. mode switches)
  929. >so what's the real benefit of using it over just checking TickCount() for
  930. >when to draw the animation?
  931.  
  932. If you don't want a callback, and just want more accuracy/resulution than
  933. TickCount, you can use Microseconds.
  934.  
  935. Microseconds(VAR microTickCount:UnsignedWide);
  936.  
  937. I think it came in in System 7, so it should always be available unless
  938. you want to support System 6.  It returns the number of microseconds since
  939. boot in a 64-bit wide number.  It's not accurate to microseconds
  940. obviously, I think it's accurate to about 20 microseconds.
  941.  
  942. Enjoy,
  943.    Peter.
  944. -- 
  945. "there is no significant correlation to violence on TV and agression in 
  946. daily life" - NHR Broadcasting Culture Research Institute in Tokyo.
  947.  
  948. ---------------------------
  949.  
  950. >From trygve@netcom.com (Trygve Isaacson)
  951. Subject: Q: system heap expansion at init time
  952. Date: Thu, 26 Oct 1995 05:06:37 GMT
  953. Organization: Freak Accident Music
  954.  
  955. I have an INIT that looks for certain files of mine, and for each file
  956. found, it loads a code segment from the file, and also grows a system heap
  957. handle that contains info about each found file. It's basically an API
  958. that's doing the dynamic linking to the plug-ins at INIT time.
  959.  
  960. What I'm seeing is "out of memory" (-108) or NULL result when allocating
  961. space for the code or growing the handle, once I get up to around the 7th
  962. file or so. The loaded code is 10K or less per file, and the handle growth
  963. is under 1K per file.
  964.  
  965. Now, I understood that the system heap under 7.0 and later (I'm running
  966. 7.5.1 on a 7100/66) grew automatically, making the 'sysz' resource
  967. obsolete (though I've seen behavior to the contrary for 'sysz'), and to
  968. some degree making INIT time system heap allocations (of small amounts
  969. like this at least) pretty certain to succeed. Are there precautions I can
  970. take, such as allocating the memory in a particular way, to make the
  971. allocations succeed?
  972.  
  973. Thanks in advance,
  974. Trygve Isaacson
  975. trygve@kagi.com
  976.  
  977. +++++++++++++++++++++++++++
  978.  
  979. >From wysocki@netcom.com (Chris Wysocki)
  980. Date: Thu, 26 Oct 1995 07:52:05 GMT
  981. Organization: NETCOM On-line Communication Services (408 261-4700 guest)
  982.  
  983. In article <trygve-2510952207170001@10.0.2.15>,
  984. Trygve Isaacson <trygve@netcom.com> wrote:
  985.  
  986. >Now, I understood that the system heap under 7.0 and later (I'm running
  987. >7.5.1 on a 7100/66) grew automatically, making the 'sysz' resource
  988. >obsolete (though I've seen behavior to the contrary for 'sysz'), and to
  989. >some degree making INIT time system heap allocations (of small amounts
  990. >like this at least) pretty certain to succeed. Are there precautions I can
  991. >take, such as allocating the memory in a particular way, to make the
  992. >allocations succeed?
  993.  
  994. While the system heap can and does grow and shrink dynamically under
  995. System 7.x, an INIT still needs to include a 'sysz' resource to ensure
  996. that the System can reserve enough memory for it during startup.  The
  997. system automatically reserves a certain minimal amount of system heap
  998. space for every INIT (16K or so, I can't recall the exact amount), but
  999. to be safe any INIT that allocates memory in the system heap should
  1000. include a 'sysz' resource to tell the system how much memory it might
  1001. expect to require.
  1002.  
  1003. Chris.
  1004.  
  1005. +++++++++++++++++++++++++++
  1006.  
  1007. >From larson@base.cs.ucla.edu (Christopher Larson)
  1008. Date: 26 Oct 1995 16:17:28 GMT
  1009. Organization: UCLA, Computer Science Department
  1010.  
  1011. In article <trygve-2510952207170001@10.0.2.15> trygve@netcom.com (Trygve Isaacson) writes:
  1012. >Now, I understood that the system heap under 7.0 and later (I'm running
  1013. >7.5.1 on a 7100/66) grew automatically, making the 'sysz' resource
  1014. >obsolete (though I've seen behavior to the contrary for 'sysz'), and to
  1015. >some degree making INIT time system heap allocations (of small amounts
  1016. >like this at least) pretty certain to succeed. Are there precautions I can
  1017. >take, such as allocating the memory in a particular way, to make the
  1018. >allocations succeed?
  1019.  
  1020. You do still need a 'sysz' resource in System 7. Try using one and get
  1021. back to us if you still have problems.
  1022.  
  1023. --Chris
  1024. _______________________________________________________________________________
  1025. Chris Larson -- Amateur Macintosh Geek, CoBase Research Assistant
  1026. L.A. Institute of Slowly and Painfully Working Out the Surprisingly Obvious
  1027. - -------------------------------------+---------------------------------------
  1028. (Insert Disclaimer Here)               | Who's the man ridin' in the sun?
  1029. UCLA Bruins--1995 NCAA Men's Basketball| Who's the man with the itchy gun?
  1030.              National Champions (yea!) | Who's the man who kills for fun?
  1031. Internet: larson@kingston.cs.ucla.edu  | Psycho Dad, Psycho Dad, PSYCHO DAD!
  1032.  
  1033. ---------------------------
  1034.  
  1035. >From greg@ohs.uwo.ca (Greg Chapman)
  1036. Subject: [Q] To form this FSSpec...
  1037. Date: Mon, 23 Oct 1995 14:23:01 -0500
  1038. Organization: U. of Western Ontario, OHS
  1039.  
  1040. How would one go about forming an FSSpec for a file
  1041. knowing *only* the full path name?
  1042.  
  1043. For instance, I know the file is named...
  1044.  
  1045. Macintosh HD:pub:msds:mercury oxide
  1046.  
  1047. ... and that's *all* I know about the file... and the solution has eluded
  1048. me. Any ideas on how to form the FSSpec?
  1049.  
  1050. -- 
  1051. Greg Chapman - Mac Programmer/Developer
  1052. Systems Manager - U. of Western Ontario OHS
  1053. London, Ontario, Canada
  1054. email: greg@ohs.uwo.ca
  1055. - -
  1056. "... cleans teeth, while you do dishes!"
  1057.  
  1058. +++++++++++++++++++++++++++
  1059.  
  1060. >From rickc@i-link.net (Richard Cardona)
  1061. Date: Mon, 23 Oct 1995 16:19:26 -0500
  1062. Organization: TradeWave Corporation (formerly EINet)
  1063.  
  1064. In article <greg-2310951423010001@mail.ohs.uwo.ca>, greg@ohs.uwo.ca (Greg
  1065. Chapman) wrote:
  1066.  
  1067. stance, I know the file is named...
  1068. > Macintosh HD:pub:msds:mercury oxide
  1069. > ... and that's *all* I know about the file... and the solution has eluded
  1070. > me. Any ideas on how to form the FSSpec?
  1071.  
  1072. Well there's a little problem.  The MacOS allows volumes with the same
  1073. name to be mounted simulateneously.  So this "path" is not necessary
  1074. unique.
  1075.  
  1076. In the simple case that it is (like 90%?) a Mac that has only one internal
  1077. drive (remember I could name a floppy "Macintosh HD" too), then you call
  1078. FSMakeFSSpec with vRefnum = 0, dirID = 0 and filename as the full path.
  1079.  
  1080. Rick
  1081.  
  1082. +++++++++++++++++++++++++++
  1083.  
  1084. >From sample@esltd.com (Don Sample)
  1085. Date: Tue, 24 Oct 1995 13:48:44 -0400
  1086. Organization: Enterprise Solutions Ltd
  1087.  
  1088. In article <greg-2310951423010001@mail.ohs.uwo.ca>, greg@ohs.uwo.ca (Greg
  1089. Chapman) wrote:
  1090.  
  1091. > How would one go about forming an FSSpec for a file
  1092. > knowing *only* the full path name?
  1093. > For instance, I know the file is named...
  1094. > Macintosh HD:pub:msds:mercury oxide
  1095. > ... and that's *all* I know about the file... and the solution has eluded
  1096. > me. Any ideas on how to form the FSSpec?
  1097. Use FSMakeFSSpec.  If you pass it a full path name in the filename
  1098. parameter it will ignore the vRefnum and dirID parameters and use the
  1099. path.
  1100.  
  1101. Str255 pathName = "\pMacintosh HD:pub:msds:mercury oxide";
  1102. FSSpec fsSpec;
  1103.  
  1104. ...
  1105.  
  1106. err = FSMakeFSSpec(0, 0, pathName, &fsSpec);
  1107.  
  1108. +++++++++++++++++++++++++++
  1109.  
  1110. >From Mark_Weinstein@msn.com (Mark Weinstein)
  1111. Date: 25 Oct 95 06:39:59 -0700
  1112. Organization: TheMicrosoftNetwork(msn.com)
  1113.  
  1114. >How would one go about forming an FSSpec for a file
  1115. >knowing *only* the full path name?
  1116. >
  1117. >For instance, I know the file is named...
  1118. >
  1119. >Macintosh HD:pub:msds:mercury oxide
  1120. >
  1121. >... and that's *all* I know about the file... and the solution has 
  1122. >eluded me. Any ideas on how to form the FSSpec?
  1123.  
  1124. Yea, but take heed of what the other guy said; if there are TWO disks 
  1125. mounted on your Mac's desktop with the name "Macintosh HD", then you 
  1126. may wind up with unpredictable results, as you may be unable to tell 
  1127. which volume was chosen.  Usually the first volume that was mounted 
  1128. on your Macintosh desktop with that name (the one with the "highest 
  1129. volume reference number") was the one chosen.  But here's the way you 
  1130. can do it.
  1131.  
  1132. #include <string.h>
  1133.  
  1134. short  get_fsspec_from_full_path( StringPtr name, FSSpec *fss )
  1135. {
  1136.     short err;
  1137.     HParamBlockRec rec;
  1138.  
  1139.     memset( ( void * )&rec, 0, sizeof( rec ) );
  1140.     /* I usually zero the entire parameter block out for safety */
  1141.     /* But you don't have to clear the whole thing out.. */
  1142.     /* ioVRefNum, ioDirID, ioCompletion, and a few other fields */
  1143.     /* should be cleared. */
  1144.  
  1145.     pb.ioNamePtr = name;
  1146.     pb.ioMisc    = ( Ptr )fss;
  1147.  
  1148.     return( PBMakeFSSpecSync( ( void * )&pb ) );
  1149. }
  1150.  
  1151. That's it.  Just call that like this:
  1152.  
  1153. void main ( void )
  1154. {
  1155.  short err;
  1156.  FSSpec mySpec;
  1157.  
  1158.  err = get_fsspec_from_full_path( "\pMacintosh HD:pub:msds:mercury 
  1159. oxide", &mySpec );
  1160.  if ( err != noErr ) {
  1161.     /* Something happened, probably file/path not found */
  1162.     return;
  1163.  }
  1164.  
  1165.  /*  You have a valid FSSpec.. */
  1166. }
  1167.  
  1168.  
  1169. Later.  MRW.
  1170.  
  1171. +++++++++++++++++++++++++++
  1172.  
  1173. >From sample@esltd.com (Don Sample)
  1174. Date: Tue, 24 Oct 1995 13:48:44 -0400
  1175. Organization: Enterprise Solutions Ltd
  1176.  
  1177. In article <greg-2310951423010001@mail.ohs.uwo.ca>, greg@ohs.uwo.ca (Greg
  1178. Chapman) wrote:
  1179.  
  1180. > How would one go about forming an FSSpec for a file
  1181. > knowing *only* the full path name?
  1182. > For instance, I know the file is named...
  1183. > Macintosh HD:pub:msds:mercury oxide
  1184. > ... and that's *all* I know about the file... and the solution has eluded
  1185. > me. Any ideas on how to form the FSSpec?
  1186. Use FSMakeFSSpec.  If you pass it a full path name in the filename
  1187. parameter it will ignore the vRefnum and dirID parameters and use the
  1188. path.
  1189.  
  1190. Str255 pathName = "\pMacintosh HD:pub:msds:mercury oxide";
  1191. FSSpec fsSpec;
  1192.  
  1193. ...
  1194.  
  1195. err = FSMakeFSSpec(0, 0, pathName, &fsSpec);
  1196.  
  1197. ---------------------------
  1198.  
  1199. End of C.S.M.P. Digest
  1200. **********************
  1201.